Package bg.smoc.model.manager

Source Code of bg.smoc.model.manager.MachineQueueManager

package bg.smoc.model.manager;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import bg.smoc.agent.GraderAgent;
import bg.smoc.model.Contest;

public class MachineQueueManager {
    protected List<GraderAgent> idleMachineQueue = new LinkedList<GraderAgent>();
    protected List<GraderAgent> busyMachineQueue = new LinkedList<GraderAgent>();

    // Collections.synchronizedList(

    public List<GraderAgent> getIdleMachineQueue() {
        return Collections.unmodifiableList(idleMachineQueue);
    }

    public List<GraderAgent> getBusyMachineQueue() {
        return Collections.unmodifiableList(busyMachineQueue);
    }

    public boolean releaseMachineFromBusyMode(GraderAgent gm) {
        if (gm == null) {
            return false;
        }
        synchronized (this) {
            boolean result = busyMachineQueue.remove(gm);
            idleMachineQueue.add(gm);
            return result;
        }
    }

    public void registerMachine(GraderAgent gm) {
        synchronized (this) {
            idleMachineQueue.add(gm);
        }
    }

    public String removeMachine(GraderAgent gm) {
        String result = "neither";
        synchronized (this) {
            boolean idle = idleMachineQueue.remove(gm);
            if (idle) {
                result = "idle";
            }
            boolean busy = busyMachineQueue.remove(gm);
            if (busy) {
                result = "busy";
            }
        }
        return result;
    }

    public GraderAgent moveMachineToBusy() {
        synchronized (this) {
            if (idleMachineQueue.isEmpty())
                return null;
            GraderAgent gm = idleMachineQueue.remove(0);
            busyMachineQueue.add(gm);
            return gm;
        }
    }

    public int markAllGradersToUpdate(Contest contest) {
        int machinesToBeUpdated = 0;
        synchronized (this) {
            for (GraderAgent machine : idleMachineQueue) {
                machine.setNeedsUpdate(contest.getId());
                machinesToBeUpdated++;
            }
            for (GraderAgent machine : busyMachineQueue) {
                machine.setNeedsUpdate(contest.getId());
                machinesToBeUpdated++;
            }
        }
        return machinesToBeUpdated;
    }

    public boolean isIdleEnoughToGrade() {
        int busyMachines = 0;
        int idleMachines = 0;
        synchronized (this) {
            busyMachines = busyMachineQueue.size();
            idleMachines = idleMachineQueue.size();
        }
        if (idleMachines == 0) {
            return false;
        }
        return (100 * idleMachines) / (busyMachines + idleMachines) > 15;
    }
}
TOP

Related Classes of bg.smoc.model.manager.MachineQueueManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.